算法性能:十种常见排序算法时间效率直观对比

一、10算法分类

本文一共总结了10种排序算法,其中 

基于比较的排序算法有

冒泡排序,插入排序,希尔排序,选择排序,归并排序,堆排序,快速排序;

线性时间排序算法包括

计数排序,基数排序,桶排序;

 

前边有提到过,基于比较的排序算法,时间复杂度最差达到O(nlogn)O(nlogn),无法突破这个界限,只有线性时间排序能够突破,达到O(n)O(n),所以说,如果满足了线性时间排序算法的限制条件,使用线性时间排序将会使排序性能得到极大提升。

二、实际测试数据 

下面对以上涉及到的每种算法做一个简单的实际测试对比:利用随机数,随机生成区间0 ~ K之间的序列,共计N个数字,利用各种算法进行排序,记录排序所需时间,测试环境为i7+vs2015+Debug版本。

算法\输入数据N=50 K=50N=200 K=100N=500 K=500N=2000 K=2000N=5000 K=8000N=10000 K=20000N=20000 K=20000N=20000 K=200000
冒泡排序 0ms 15ms 89ms 1493ms 9363ms 36951ms 147817ms 143457ms
插入排序 1ms 13ms 82ms 1402ms 8698ms 34731ms 134817ms 134836ms
希尔排序 0ms 1ms 6ms 30ms 110ms 257ms 599ms 606ms
选择排序 0ms 5ms 31ms 461ms 2888ms 11736ms 45308ms 44838ms
堆排序 0ms 3ms 9ms 40ms 124ms 247ms 525ms 527ms
归并排序 2ms 6ms 18ms 75ms 199ms 392ms 778ms 793ms
快速排序 0ms 1ms 2ms 14ms 36ms 84ms 196ms 163ms
计数排序 0ms 1ms 1ms 5ms 15ms 32ms 51ms 62ms
基数排序 0ms 1ms 4ms 19ms 47ms 114ms 237ms 226ms
桶排序 0ms 2ms 6ms 25ms 68ms 126ms 254ms 251ms

三、性能对比小结

1. 传统简单排序确实当数据量很小的时候也表现不错,但当数据量增大,其耗时也增大十分明显; 

2. 冒泡,插入,选择三种排序中,当数据量很大时,选择排序性能会更好; 

3. 堆排,希尔,归并,快排几种排序算法也表现不错,源于其时间复杂度达到了O(nlogn)O(nlogn); 

4. 随机快速排序性能确实表现十分亮眼,甚至有时比基数排序和桶排序还好,这可能也是快排如此流行的原因; 

5. 线性排序中计数排序表现最好,但他们的限制也比较明显,只能处理范围内的正整数。

 

posted @ 2018-09-25 17:12  活的潇洒80  阅读(7266)  评论(0编辑  收藏  举报